/* USER CODE BEGIN Header */
/**
 ******************************************************************************
 * @file    stm32f1xx_it.c
 * @brief   Interrupt Service Routines.
 ******************************************************************************
 * @attention
 *
 * Copyright (c) 2024 STMicroelectronics.
 * All rights reserved.
 *
 * This software is licensed under terms that can be found in the LICENSE file
 * in the root directory of this software component.
 * If no LICENSE file comes with this software, it is provided AS-IS.
 *
 ******************************************************************************
 */
/* USER CODE END Header */

/* Includes ------------------------------------------------------------------*/
#include "main.h"
#include "stm32f1xx_it.h"
#include "OLED.h"
/* Private includes ----------------------------------------------------------*/
/* USER CODE BEGIN Includes */
/* USER CODE END Includes */

/* Private typedef -----------------------------------------------------------*/
/* USER CODE BEGIN TD */

/* USER CODE END TD */

/* Private define ------------------------------------------------------------*/
/* USER CODE BEGIN PD */

/* USER CODE END PD */

/* Private macro -------------------------------------------------------------*/
/* USER CODE BEGIN PM */

/* USER CODE END PM */

/* Private variables ---------------------------------------------------------*/
/* USER CODE BEGIN PV */
uint8_t rx_buff_su[2];
uint8_t rx_buff_jd[2];
extern uint8_t move_mode1;
/* USER CODE END PV */

/* Private function prototypes -----------------------------------------------*/
/* USER CODE BEGIN PFP */

/* USER CODE END PFP */

/* Private user code ---------------------------------------------------------*/
/* USER CODE BEGIN 0 */

/* USER CODE END 0 */

/* External variables --------------------------------------------------------*/
extern UART_HandleTypeDef huart1;
extern UART_HandleTypeDef huart2;
/* USER CODE BEGIN EV */

/* USER CODE END EV */

/******************************************************************************/
/*           Cortex-M3 Processor Interruption and Exception Handlers          */
/******************************************************************************/
/**
 * @brief This function handles Non maskable interrupt.
 */
void NMI_Handler(void)
{
  /* USER CODE BEGIN NonMaskableInt_IRQn 0 */

  /* USER CODE END NonMaskableInt_IRQn 0 */
  /* USER CODE BEGIN NonMaskableInt_IRQn 1 */
  while (1)
  {
  }
  /* USER CODE END NonMaskableInt_IRQn 1 */
}

/**
 * @brief This function handles Hard fault interrupt.
 */
void HardFault_Handler(void)
{
  /* USER CODE BEGIN HardFault_IRQn 0 */

  /* USER CODE END HardFault_IRQn 0 */
  while (1)
  {
    /* USER CODE BEGIN W1_HardFault_IRQn 0 */
    /* USER CODE END W1_HardFault_IRQn 0 */
  }
}

/**
 * @brief This function handles Memory management fault.
 */
void MemManage_Handler(void)
{
  /* USER CODE BEGIN MemoryManagement_IRQn 0 */

  /* USER CODE END MemoryManagement_IRQn 0 */
  while (1)
  {
    /* USER CODE BEGIN W1_MemoryManagement_IRQn 0 */
    /* USER CODE END W1_MemoryManagement_IRQn 0 */
  }
}

/**
 * @brief This function handles Prefetch fault, memory access fault.
 */
void BusFault_Handler(void)
{
  /* USER CODE BEGIN BusFault_IRQn 0 */

  /* USER CODE END BusFault_IRQn 0 */
  while (1)
  {
    /* USER CODE BEGIN W1_BusFault_IRQn 0 */
    /* USER CODE END W1_BusFault_IRQn 0 */
  }
}

/**
 * @brief This function handles Undefined instruction or illegal state.
 */
void UsageFault_Handler(void)
{
  /* USER CODE BEGIN UsageFault_IRQn 0 */

  /* USER CODE END UsageFault_IRQn 0 */
  while (1)
  {
    /* USER CODE BEGIN W1_UsageFault_IRQn 0 */
    /* USER CODE END W1_UsageFault_IRQn 0 */
  }
}

/**
 * @brief This function handles System service call via SWI instruction.
 */
void SVC_Handler(void)
{
  /* USER CODE BEGIN SVCall_IRQn 0 */

  /* USER CODE END SVCall_IRQn 0 */
  /* USER CODE BEGIN SVCall_IRQn 1 */

  /* USER CODE END SVCall_IRQn 1 */
}

/**
 * @brief This function handles Debug monitor.
 */
void DebugMon_Handler(void)
{
  /* USER CODE BEGIN DebugMonitor_IRQn 0 */

  /* USER CODE END DebugMonitor_IRQn 0 */
  /* USER CODE BEGIN DebugMonitor_IRQn 1 */

  /* USER CODE END DebugMonitor_IRQn 1 */
}

/**
 * @brief This function handles Pendable request for system service.
 */
void PendSV_Handler(void)
{
  /* USER CODE BEGIN PendSV_IRQn 0 */

  /* USER CODE END PendSV_IRQn 0 */
  /* USER CODE BEGIN PendSV_IRQn 1 */

  /* USER CODE END PendSV_IRQn 1 */
}

/**
 * @brief This function handles System tick timer.
 */
void SysTick_Handler(void)
{
  /* USER CODE BEGIN SysTick_IRQn 0 */

  /* USER CODE END SysTick_IRQn 0 */
  HAL_IncTick();
  /* USER CODE BEGIN SysTick_IRQn 1 */

  /* USER CODE END SysTick_IRQn 1 */
}

/******************************************************************************/
/* STM32F1xx Peripheral Interrupt Handlers                                    */
/* Add here the Interrupt Handlers for the used peripherals.                  */
/* For the available peripheral interrupt handler names,                      */
/* please refer to the startup file (startup_stm32f1xx.s).                    */
/******************************************************************************/

/**
 * @brief This function handles USART1 global interrupt.
 */
void USART1_IRQHandler(void)
{
  /* USER CODE BEGIN USART1_IRQn 0 */
  //  SU-03T的串口通讯中断

  /* USER CODE END USART1_IRQn 0 */
  HAL_UART_IRQHandler(&huart1);
  /* USER CODE BEGIN USART1_IRQn 1 */

  switch (rx_buff_su[0])
  {
  case 0x01:
    // 立正代码
    OLED_ShowImage(0, 0, 128, 64, Stand);
    OLED_Update();
    move_mode1 = 1;
    break;
  case 0x02:
    // 前进代码
    OLED_ShowImage(0, 0, 128, 64, Proceed);
    OLED_Update();
    move_mode1 = 2;
    break;
  case 0x03:
    // 左转代码
    OLED_ShowImage(0, 0, 128, 64, TurnL);
    OLED_Update();
    move_mode1 = 3;
    break;
  case 0x04:
    // 右转代码
    OLED_ShowImage(0, 0, 128, 64, TurnR);
    OLED_Update();
    move_mode1 = 4;
    break;
  case 0x05:
    // 特殊代码
    OLED_ShowImage(0, 0, 128, 64, Special);
    OLED_Update();
    move_mode1 = 5;
    break;
  case 0x06:
    // 睡觉代码
    OLED_ShowImage(0, 0, 128, 64, Sleep);
    OLED_Update();
    move_mode1 = 6;
    break;

  default:
    break;
  }

  // rx_buff_su[0] = 0;
  // rx_buff_su[1] = 0;
  // rx_buff_su[2] = 0;
  // rx_buff_su[3] = 0;
  // rx_buff_su[4] = 0;
  // rx_buff_su[5] = 0; //  清空缓存

  HAL_UART_Receive_IT(&huart1, rx_buff_su, 1); // 重新开启串口1的中断使能
  /* USER CODE END USART1_IRQn 1 */
}

/**
 * @brief This function handles USART2 global interrupt.
 */
void USART2_IRQHandler(void)
{
  /* USER CODE BEGIN USART2_IRQn 0 */
  //  蓝牙串口接收中断

  /* USER CODE END USART2_IRQn 0 */
  HAL_UART_IRQHandler(&huart2);
  /* USER CODE BEGIN USART2_IRQn 1 */
  HAL_UART_Transmit(&huart2, rx_buff_jd, 1, 200);

  switch (rx_buff_jd[0])
  {
  case 0x01:
    // 立正代码
    OLED_ShowImage(0, 0, 128, 64, Stand);
    OLED_Update();
    move_mode1 = 1;
    break;
  case 0x02:
    // 前进代码
    OLED_ShowImage(0, 0, 128, 64, Proceed);
    OLED_Update();
    move_mode1 = 2;
    break;
  case 0x03:
    // 左转代码
    OLED_ShowImage(0, 0, 128, 64, TurnL);
    OLED_Update();
    move_mode1 = 3;
    break;
  case 0x04:
    // 右转代码
    OLED_ShowImage(0, 0, 128, 64, TurnR);
    OLED_Update();
    move_mode1 = 4;
    break;
  case 0x05:
    // 特殊代码
    OLED_ShowImage(0, 0, 128, 64, Special);
    OLED_Update();
    move_mode1 = 5;
    break;
  case 0x06:
    // 睡觉代码
    OLED_ShowImage(0, 0, 128, 64, Sleep);
    OLED_Update();
    move_mode1 = 6;
    break;
  case 0x07:
    // 摇摆代码
    OLED_ShowImage(0, 0, 128, 64, Special);
    OLED_Update();
    move_mode1 = 7;
    break;
  case 0x08:
    // 握手代码
    OLED_ShowImage(0, 0, 128, 64, Special);
    OLED_Update();
    move_mode1 = 8;
    break;

  default:
    break;
  }

  HAL_UART_Receive_IT(&huart2, rx_buff_jd, 1); // 重新开启串口1的中断使能
  /* USER CODE END USART2_IRQn 1 */
}

/* USER CODE BEGIN 1 */

/* USER CODE END 1 */
